﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using IgrMensageiros.Util;
using BLL;
using MODELO;
using log4net;

namespace IgrMensageiros.UI
{
    public partial class UI_IgrejasCongregacao : Form
    {
        #region "Declarações"

        private static log4net.ILog log;
        Igrejas igrejas = new Igrejas();

        #endregion

        public UI_IgrejasCongregacao()
        {
            InitializeComponent();

            log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            log4net.Config.XmlConfigurator.Configure();

            InicializarPanel();
        }

        #region "Eventos"

        private void btnFechar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnSalvarFechar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (igrejas != null)
                    {
                        Salvar(igrejas);
                        Close();
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (igrejas != null)
                    {
                        Salvar(igrejas);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            try
            {
                Utils.LimparCampos(this);
            }
            catch(Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void txtCEP_KeyPress(object sender, KeyPressEventArgs e)
        {
            try{
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void txtCep_TextChanged(object sender, EventArgs e)
        {
            // Se o número de dígitos no txtCEP chegar a 8, realizar consulta.
            try
            {
                if (txtCep.Text.Length == 8)
                {
                    FazerConsulta(txtCep.Text);
                }
                else
                {
                    txtBairro.Clear();
                    txtEndereco.Clear();
                    txtEstado.Clear();
                    txtCidade.Clear();
                }
            }
            catch(Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        #endregion

        #region "Metodos"

        private void FazerConsulta(string Cep)
        {
            string[] resultado = ConsultarCep.FazerConsulta(Cep);
            if (resultado[0] != "Erro")
            {
                txtBairro.Text = resultado[0];
                txtEndereco.Text = resultado[1];
                txtEstado.Text = resultado[2];
                txtCidade.Text = resultado[3];
            }
            else
            {
                MessageBox.Show(resultado[1], "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private Boolean Validar()
        {
            try
            {
                bool count;
                bool retorno = false;
  
                count = Utils.CamposObrigatorios(txtBairro );
                count = Utils.CamposObrigatorios(txtCep);
                count = Utils.CamposObrigatorios(txtCidade);
                count = Utils.CamposObrigatorios(txtEndereco);
                count = Utils.CamposObrigatorios(txtNome);
                count = Utils.CamposObrigatorios(txtNumero);
                count = Utils.CamposObrigatorios(txtEstado);

                if (count.GetHashCode() > 0)
                {
                    igrejas.Bairro = txtBairro.Text;
                    igrejas.CEP = txtCep.Text;
                    igrejas.Cidade = txtCidade.Text;
                    igrejas.CNPJ = txtCNPJ.Text;
                    igrejas.Endereco = txtEndereco.Text;
                    igrejas.Estado = txtEstado.Text;
                    igrejas.Nome = txtNome.Text;
                    igrejas.Numero = txtNumero.Text;
                    igrejas.Responsavel = textResponsavel.Text;
                    igrejas.TipoIgreja = rBCongregacao.Checked ? Convert.ToChar("C") : Convert.ToChar("S");

                    retorno = true;
                }
                else
                {
                    Mensagem(Utils.Const_PreencherCampos);
                }

                return retorno;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void InicializarPanel()
        {
            panel.Visible = false;
            lblMensagem.Text = "";
        }

        private void Salvar(Igrejas pIgrejas)
        {
            IgrejasBLL igrejasBLL = new IgrejasBLL();
            try
            {
                if (igrejasBLL.Gravar(pIgrejas))
                {
                    Mensagem(Utils.Const_RegistroSalvo);
                }
                else
                {
                   Mensagem(Utils.Const_RegistroJaCadastrado);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private String Mensagem(String pMensagem)
        {
            panel.Visible = true;
            lblMensagem.Visible = true;
            return lblMensagem.Text = pMensagem;
        }
        #endregion


    }
}


